﻿using System;
using System.Collections;
using Castle.MonoRail.Framework;
using CoopSaude.DAO;
using CoopSaude.Dto;
using System.Collections.Generic;

namespace CoopSaude.Controllers
{
    [ControllerDetails(Area = "RH")]
    [DefaultAction("Listar")]
    public class FuncionariosController : BaseController
    {
        #region Actions
        public void Listar()
        {
            try
            {
                PropertyBag["listaFuncionarios"] = FuncionarioDto.VisualizarFuncionarios();
            }
            catch (Exception e)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }


            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "listar";
        }


        public void FolhaDePagamento()
        {
            try
            {
                PropertyBag["listaFuncionarios"] = FuncionarioDto.VisualizarFuncionarios();
            }
            catch (Exception e)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }


            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "folhadepagamento";
        }

        public void Editar()
        {

            try
            {
                PropertyBag["Funcionario"] = FuncionarioDto.obterFuncionario( System.Convert.ToInt32(Params["idFuncionario"],10) );
                //PropertyBag["listaDeptos"] = DepartamentoDto.VisualizarDepartamentos();
                this.MenuUtilizado = "rh";
                this.SecaoUtilizada = "funcionarios";
                this.AcaoUtilizada = "editar";
                
            }
            catch (Exception ex)
            {

                Flash["erro"] = "Ocorreu um erro ao recuperar o produto";
                RedirectToAction("listar");
            }
        }

        public void Atualizar()
        {
            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "editar";

            try
            {
                if (Params["funcionario_id"].Trim() == String.Empty ||
                    Params["funcionario_iddepartamento"].Trim() == String.Empty ||
                    Params["funcionario_nome"].Trim() == String.Empty ||
                    Params["funcionario_salariohora"].Trim() == String.Empty)
                {
                    Flash["erro"] = "Voce precisa preencher todos os campos.";
                    RenderView("editar");
                }
                else
                {
                    var func = FuncionarioDto.obterFuncionario(Int32.Parse(Params["funcionario_id"]));
                    if (func != null && func.Ativo)
                    {
                        func.Cidade = Params["funcionario_cidade"].Trim();
                        func.CPF = Params["funcionario_cpf"].Trim();
                        func.Endereco = Params["funcionario_endereco"].Trim();
                        func.Estado = Params["funcionario_estado"].Trim();
                        func.IdDepartamento = Int32.Parse(Params["funcionario_iddepartamento"]);
                        func.Nome = Params["funcionario_nome"].Trim();
                        func.RG = Params["funcionario_rg"].Trim();
                        func.SalarioHora = Decimal.Parse(Params["funcionario_salariohora"].Trim());
                        func.Telefone1 = Params["funcionario_telefone1"].Trim();
                        func.Telefone2 = Params["funcionario_telefone2"].Trim();

                        FuncionarioDto.atualizarFuncionario(func);

                        Flash["sucesso"] = "Funcionario editado com sucesso";
                    }
                    else
                    {
                        Flash["erro"] = "Funcionario nao encontrado";
                    }
                    RedirectToAction("listar");
                }

            }
            catch (Exception)
            {

                Flash["erro"] = "Ocorreu um erro ao salvar o produto durante a conexão com o banco de dados.";
                RenderView("editar");
            }
        }

        public void Adicionar()
        {
            //PropertyBag["listaDeptos"] = DepartamentoDto.VisualizarDepartamentos();
            PropertyBag["listaTipos"] = RHFinanceiroDAO.listarTiposFuncionarios();

            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "adicionar";
        }
        

        public void Criar()
        {
            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "adicionar";

            if (Params["funcionario_iddepartamento"].Trim() == String.Empty ||
                Params["funcionario_nome"].Trim() == String.Empty ||
                Params["funcionario_salariohora"].Trim() == String.Empty ||
                Params["funcionario_tipo"].Trim() == String.Empty)
            {
                Flash["erro"] = "Voce precisa preencher todos os campos.";
                RenderView("adicionar");
                return;
            }

            int idDepto;
            if (!Int32.TryParse(Params["funcionario_iddepartamento"], out idDepto))
            {
                Flash["erro"] = "Código inválido de id de departamento";
                RenderView("adicionar");
                return;
            }

            try
            {
                var func = new FuncionarioDto()
                {
                    Cidade = Params["funcionario_cidade"].Trim(),
                    CPF = Params["funcionario_cpf"].Trim(),
                    Endereco = Params["funcionario_endereco"].Trim(),
                    Estado = Params["funcionario_estado"].Trim(),
                    IdDepartamento = Int32.Parse(Params["funcionario_iddepartamento"]),
                    Nome = Params["funcionario_nome"].Trim(),
                    RG = Params["funcionario_rg"].Trim(),
                    SalarioHora = Decimal.Parse(Params["funcionario_salariohora"].Trim()),
                    Telefone1 = Params["funcionario_telefone1"].Trim(),
                    Telefone2 = Params["funcionario_telefone2"].Trim(),
                };
                FuncionarioDto.CriarFuncionario(Params["funcionario_tipo"], func);
                Flash["sucesso"] = "Funcionario criado com sucesso";
                RedirectToAction("listar");
            }
            catch (Exception)
            {
                Flash["erro"] = "Ocorreu um erro ao criar o funcionário";
                RenderView("adicionar");
            }

        }

        public void Desativar()
        {
            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = "desativar";

            try
            {
                if (RHFinanceiroDAO.desativarFuncionario(System.Convert.ToInt32(Params["idFuncionario"], 10)))
                {
                    Flash["sucesso"] = "Funcionário desativado com sucesso. Contate um administrador para reativá-lo";
                }
                else
                {
                    Flash["erro"] = "Operação não pode ser completada";
                }
            }
            catch (Exception)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }
            RedirectToAction("listar");
        }
        #endregion Actions

        private void Redirecionar(string acaoUtilizada)
        {
            this.MenuUtilizado = "rh";
            this.SecaoUtilizada = "funcionarios";
            this.AcaoUtilizada = acaoUtilizada;
            RedirectToAction("listar");
        }
    }
}
